package com.zhuoyue.biz.core.api.dao;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhuoyue.biz.core.api.domain.InfraredDeviceControlDO;
import com.zhuoyue.biz.core.api.domain.InfraredDeviceDO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * @author wjming
 * @ClassName: InfraredDeviceDao
 * @Description: 红外设备底层处理
 * @Date 2021-07-08 13:46
 */
public interface InfraredDeviceDao extends BaseMapper<InfraredDeviceDO> {

    /**
     * 查询房间中的红外设备
     *
     * @param roomId
     * @return
     */
    List<InfraredDeviceDO> selectInfraredDeviceListByRoomId(String roomId);

    /**
     * 删除家庭中的红外设备
     *
     * @param homeId
     * @return
     */
    int deleteInfraredDeviceByHomeId(String homeId);

    /**
     * 查询家庭中的红外设备列表
     *
     * @param homeId
     * @return
     */
    List<InfraredDeviceDO> selectInfraredDeviceListByHomeId(Long homeId);


    /**
     * 查询通过红外学习仪添加的红外设备
     *
     * @param homeId
     * @return
     */
    List<InfraredDeviceDO> selectInfraredDeviceListByDeviceIdList(@Param("homeId") String homeId);


    /**
     * 新增红外设备
     *
     * @param infraredDevice
     * @return
     */
    int insertInfraredDevice(InfraredDeviceDO infraredDevice);


    /**
     * 根据主键删除
     *
     * @param id
     * @return
     */
    int deleteInfraredDeviceById(String id);

    /**
     * 通过设备id查询此设备下面的红外设备列表
     *
     * @param deviceId
     * @return
     */
    List<InfraredDeviceDO> selectInfraredDeviceListByDeviceId(String deviceId);

    /**
     * 查询用户所有的红外设备
     *
     * @param userId
     * @return
     */
    List<InfraredDeviceDO> selectInfraredDeviceListByUserId(Long userId);


    /***
     * 通过返回的id查询设备信息
     * @param id
     * @return
     */
    InfraredDeviceControlDO selectInfraredDeviceMessageById(String id);

    /**
     * 通过ID获取房间名称
     *
     * @param id
     * @return
     */
    InfraredDeviceDO selectByIdAndRoomName(String id);

    /**
     * 获取红外设备信息
     *
     * @param homeId
     * @return
     */
    @Select("select in_dev.*,room.name as roomName from tbl_infrared_device in_dev left join tbl_room room on in_dev.room_id = room.id where in_dev.home_id=#{homeId}")
    List<InfraredDeviceDO> getInfraredList(@Param("homeId") String homeId);


    /**
     * 通过id获取红外设备名称和房间名称
     *
     * @param ids
     * @return
     */
    List<InfraredDeviceDO> selectInfraredNameAndRoomNameByIds(@Param("ids") List<String> ids);
}
